﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.Text;

namespace ZOVNP.Model.Abstracts
{
    /// <summary> Расширитель ISettingsServiceProvider </summary>
    /// <remarks> Добавляет 2 новых метода </remarks>
    [Description("Расширитель ISettingsServiceProvider")]
    public static class SettingsServiceExtender
    {
        /// <summary> Текст сообщения об отсутствии настройки </summary>
        private const string MESSAGE_NO_SETTINGS = "Настройка '{0}' не найдена.";

        /// <summary> Получить настройку указанного типа </summary>
        /// <typeparam name="TSettings"> тип настройки </typeparam>
        /// <param name="provider"> провайдер </param>
        /// <returns> настройка или null </returns>
        public static TSettings GetSettings<TSettings>(this ISettingsServiceProvider provider) where TSettings : ApplicationSettingsBase
        {
            return ((TSettings)provider.GetSettings(typeof(TSettings)));
        }
        /// <summary> Получить настройку указанного типа </summary>
        /// <param name="provider"> провайдер </param>
        /// <param name="settingsType"> тип настройки </param>
        /// <returns> настройка </returns>
        /// <remarks> В случае отсутствия настройки генерируется исключение </remarks>
        public static ApplicationSettingsBase GetRequiredSettings(this ISettingsServiceProvider provider, System.Type settingsType)
        {
            ApplicationSettingsBase settings = provider.GetSettings(settingsType);
            if (settings == null)
                throw new ArgumentException(String.Format(MESSAGE_NO_SETTINGS, settingsType));
            return (settings);
        }
    }
}
